\chapter{Analyse der Aufgabenstellung}

\section{Allgemeine Funktionsbeschreibung / Ziele}

Die Aufgabe besteht darin, einen Lego-Roboter so zu programmieren, dass er autonom auf einem vorgegebenen Parcours entlang fahren kann und dabei Parklücken erkennt und dokumentiert. Über ein 7 Zoll Tablet kann das Verhalten des Roboters dahingehend gesteuert werden, dass er autonom in gefundene oder neue Parklücken einparkt und auf Befehl auch wieder ausparkt.

Das Guidance-Modul dient dabei als Schnittstelle aller übrigen Module und koordiniert den Programmablauf. Es fragt die Nutzereingaben vom HMI-Modul ab, erhält Informationen über die Umgebung vom Perception- und Navigationsmodul und erteilt dem Control-Modul Befehle, wie die Regler des Antriebs einzustellen sind. Dabei werden die Befehle vom HMI-Modul als Missionen interpretiert und in entsprechende Teilmissionen unterteilt und abgearbeitet.

Der Roboter soll auf der Linie des Parcours entlangfahren und nach neuen Parklücken suchen können. Gefundene Lücken werden dann auf dem Display dargestellt und können ausgewählt werden, um in diese gezielt einzuparken. Zudem soll es einen Modus geben, in dem der Roboter schnellstmöglich in die nächste Parklücke einparkt, die er findet. Bei allen Parkvorgängen soll der Roboter möglichst realistisch, d.h. rückwärts mit einem vorgegebenen Fahrweg, den auch ein Auto fahren könnte, einparken. Er wartet dann in der Lücke, bis er das Signal zum Ausparken erhält, und fährt auf dem gleichen Weg auf den Parcours zurück. Dort sucht er automatisch wieder nach neuen Parklücken. Der Roboter soll zudem jederzeit deaktivierbar und komplett abschaltbar sein.

Ziel des Guidance-Moduls ist es, die Befehle des HMI-Moduls möglichst schnell und sinnvoll abzuarbeiten. So ist es u.a. sinnvoll, einige Funktionen wie erneute Parklückensuche bei einem Parkvorgang zu deaktivieren. Überschneidungen innerhalb des Programmablaufs müssen unbedingt vermieden werden.

Außerdem dürfen keine Dead Locks erzeugt werden, d.h. Zustände, aus denen das Programm nicht wieder in den normalen Ablauf zurückkehren kann.

\section{Geplantes Vorgehen}
 
Zur Lösung der Aufgabenstellung werden zunächst alle Missionen untersucht und sinnvolle Modi des Control-Moduls festgelegt. Außerdem wird festgelegt, ob die Parklückensuche sowie die Korrektur der Navigationswerte aktiviert oder deaktiviert sein sollte. Danach wird der allgemeine Ablauf innerhalb der Hauptmissionen notiert.

Aus diesem Ablauf werden anschließend die Haupt- und Unterzustandsmaschinen entworfen und immer weiter verbessert. Daraus werden zusätzlich die Zustandsübergangstabellen jeder Finite State Machine (FSM) abgeleitet. Dies geschieht anfangs alles auf dem Papier. Erst im späteren Projektverlauf wird aus den theoretischen Überlegungen dann das Beispielprogramm erweitert und getestet.

Nachdem die Zustandsmaschinen grundlegend implementiert wurden, wird der Pfadgenerator mathematisch hergeleitet, implementiert und die Koeffizienten der Trajektorie berechnet und an das Control-Modul weitergeleitet. 

\section{Schnittstellen zu anderen Modulen und Zusammenarbeit mit anderen Modulverantwortlichen}

Da das Guidance-Modul wie bereits beschrieben sehr zentrale Aufgaben erfüllt, hat es Schnittstellen zu allen anderen Modulen. Von besonderer Wichtigkeit ist die Schnittstelle zum HMI-Modul, von dem alle Befehle des Nutzers übertragen werden.

Ebenfalls ist eine enge Zusammenarbeit mit dem Navigations-Modul nötig, um die Zustandsmaschinen auf die Genauigkeit der Koordinaten und die Parklückensuche anpassen zu können.

Eine direkte Absprache kommt zudem mit dem Control-Modul zustande, um die geforderte Funktion der Trajektoriensteuerung im Pfadgenerator zu realisieren. Dabei muss festgelegt werden, welche Funktionen im welchem Modul umgesetzt werden. Um eine gute Arbeitsteilung zu realisieren, werden die Koeffizienten des Polynomes für x- und y-Koordinate in Abhängigkeit vom Gesamtweg im Guidance-Modul berechnet, und aus diesem dann im Control-Modul die benötigten Geschwindigkeiten der Antriebe sowie der Zeitverlauf der Bewegung berechnet.
Zudem erhält das Control-Modul Informationen zum aktuellen Regler-Modus und Sollwertvorgaben.

Die Schnittstelle zum Perception-Modul beschränkt sich auf Abrufe einiger Sensorwerte.